

class OuterClass{
    public int data1 = 1;
    public int data2 = 2;
    public static int data3= 3;
    // 实例内部类，你可以将它当做 是 外部类的一个普通实例的成员。（没有 static）
    class InClass{
        public int data1 = 4;
        private int data5 = 5;
        public static final int data6 = 6;

        public InClass(){
            System.out.println("不带参的实例内部类的构造方法");
        }

        public void test(){
            System.out.println(data1);
            System.out.println(OuterClass.this.data1);
        }
    }

    public void func1(){
        System.out.println("OuterClass::func1()");
    }
}

public class InnerClass extends OuterClass.InClass{
    // 继承内部类，需要 在 构造方法中继承 该实例内部类的 外部类构造方法 。
    public InnerClass(OuterClass o){
        o.super();
    }
    public static void main(String[] args) {
        OuterClass outerClass = new OuterClass();
//      InClass inClass = new  InClass();
        OuterClass.InClass  inClass = outerClass.new InClass();
        inClass.test();
    }
}



// 本地内部类
//    public void func(){
//        class Test{
//            // 属性
//            // 方法
//        }
//        // 缺点：只能在当前方法中使用
//    }
